package com.qy.util;


import java.security.MessageDigest;
import java.text.SimpleDateFormat;
import java.util.Date;


public class RechargeUtil {
	/**商户在掌支付后台注册的商户id*/
	public static String partnerId = "1000100020000986"; 
	/**商户在掌支付后台的应用id*/
	public static int appId = 3114;
	/**商户在掌支付后台的渠道*/
	public static String qn="zyap3114_56512_100";
	/**掌支付分配的支付方式 微信:1000200010000000  支付宝:1000200020000000   易联:1000200090000000 */
	public static String currency = "1000200010000000";
	/**secretKey为掌支付后台密钥*/
	public static String secretKey = "E7AF3B2BA78745A2ABF89EDEBC31A0D3";
	
	/**
	 * md5加密
	 * @param str
	 * @return
	 */
	public static String encoderByMd5(String str){
		 String newstr = "";
		try {
			// 确定计算方法
			MessageDigest md5 = MessageDigest.getInstance("MD5");
			byte[] b = md5.digest(str.getBytes("utf8"));
			int i;
			StringBuffer buf = new StringBuffer("");
	        for (int offset = 0; offset < b.length; offset++) {
	             i = b[offset];
	             if (i < 0)
	                 i += 256;
	             if (i < 16)
	                 buf.append("0");
	             buf.append(Integer.toHexString(i));
	        }
	        newstr = buf.toString();
		} catch (Exception e) {
			e.printStackTrace();
		}
	
		// 加密后的字符串
/*        BASE64Encoder base64en = new BASE64Encoder();
		String newstr = base64en.encode(md5.digest(str.getBytes("utf8")));*/
		return newstr;
	}
	/**
	 * 充值己方加密
	 * @param userId  用户ID
	 * @param diamond  钻石
	 * @param money    需要支付的钱
	 * @param date    创建的日期
	 * @return
	 */
	public static String LocalSign(int userId,int diamond,int money,long date){
		return RechargeUtil.encoderByMd5(userId+StaticData.first_split+diamond+StaticData.first_split
				+money+StaticData.first_split+date);
	}
	
	/**
	 * 掌支付的签名验证
	 * @param partnerId  商户在掌支付后台注册的商户id
	 * @param appId      商户在掌支付后台的应用id 3114
	 * @param money      商户传入的金额
	 * @param times      14位数字  参数格式：yyyyMMddHHmmss
	 * @param currency   掌支付分配的支付方式
	 * @param secretKey  secretKey为掌支付后台密钥
	 * @return
	 */
	public static String RechargeSign(int money,Date date){
		String times = getRecharegeTime(date);
		System.err.println(RechargeUtil.encoderByMd5(partnerId + appId + currency + money+ times + secretKey));
		return RechargeUtil.encoderByMd5(partnerId + appId + currency + money+ times + secretKey);
	}
	
	/**
	 * 把时间转换成掌支付需要的格式
	 * @param date
	 * @return
	 */
	public static String getRecharegeTime(Date date){
		//14位数字  参数格式：yyyyMMddHHmmss  示例：20170510102510 （此参数的值与当前系统时间相差不能超过5分钟）
		 SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
		String times = format.format(date);
		return times;
	}
	
	public static void main(String[] args) {
		System.out.println(RechargeUtil.encoderByMd5("qingyi123"));
	}
}
